package com.zenithmind.document.pojo.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.*;
import lombok.Data;

/**
 * 文档版本更新DTO
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@Schema(description = "文档版本更新DTO")
public class DocumentVersionUpdateDTO {

    /**
     * 版本号
     */
    @Schema(description = "版本号")
    @Size(max = 50, message = "版本号长度不能超过50字符")
    private String versionNumber;

    /**
     * 版本名称
     */
    @Schema(description = "版本名称")
    @Size(max = 200, message = "版本名称长度不能超过200字符")
    private String versionName;

    /**
     * 版本描述
     */
    @Schema(description = "版本描述")
    private String description;

    /**
     * 文件路径
     */
    @Schema(description = "文件路径")
    private String filePath;

    /**
     * 文件名
     */
    @Schema(description = "文件名")
    @Size(max = 255, message = "文件名长度不能超过255字符")
    private String fileName;

    /**
     * 文件大小（字节）
     */
    @Schema(description = "文件大小（字节）")
    @Min(value = 0, message = "文件大小不能为负数")
    private Long fileSize;

    /**
     * 文件类型
     */
    @Schema(description = "文件类型")
    @Size(max = 100, message = "文件类型长度不能超过100字符")
    private String fileType;

    /**
     * 文件MD5
     */
    @Schema(description = "文件MD5")
    @Size(max = 32, message = "文件MD5长度不能超过32字符")
    private String fileMd5;

    /**
     * 是否为主版本（0-否，1-是）
     */
    @Schema(description = "是否为主版本（0-否，1-是）")
    @Min(value = 0, message = "是否为主版本值只能是0或1")
    @Max(value = 1, message = "是否为主版本值只能是0或1")
    private Integer isMajor;

    /**
     * 变更类型（1-新增，2-修改，3-删除，4-重构）
     */
    @Schema(description = "变更类型（1-新增，2-修改，3-删除，4-重构）")
    @Min(value = 1, message = "变更类型值不能小于1")
    @Max(value = 4, message = "变更类型值不能大于4")
    private Integer changeType;

    /**
     * 变更说明
     */
    @Schema(description = "变更说明")
    private String changeLog;

    /**
     * 版本状态（0-草稿，1-已发布，2-已归档）
     */
    @Schema(description = "版本状态（0-草稿，1-已发布，2-已归档）")
    @Min(value = 0, message = "版本状态值不能小于0")
    @Max(value = 2, message = "版本状态值不能大于2")
    private Integer status;

    /**
     * 标签（JSON格式）
     */
    @Schema(description = "标签（JSON格式）")
    private String tags;

    /**
     * 备注
     */
    @Schema(description = "备注")
    private String remarks;
}
